package com.cskaoyan.javase.oop3._2inner._5anonymous._1basic;

/**
 * 匿名内部类的语法:
 * new 类名或者接口名(){
 *   // 某类名或接口名的子类的类体
 * };
 *
 * 关于匿名内部类对象,补充以下:
 *      1.匿名内部类语法结构中的"{}"是匿名子类的类体,这个类体中允许定义什么结构呢?
 *          这个匿名子类的类体中可以直接定义构造器吗?
 *          不可以直接定义构造器
 *          (了解)匿名内部类没有构造器吗?
 *          有构造器,底层会创建一个默认的无参构造器,但是自己是不能定义的,因为匿名子类的类名不知道
 *          所有类都会有构造器
 *
 *      2.匿名内部类的语法结构中"()"是什么?它就是单纯的语法形式吗?它有什么其他作用吗?
 *          如果匿名内部类创建的是接口的子类对象,这时"()"是无用的,可以认为就是语法形式
 *              当然也可以认为这个"()"是给Object类的无参构造器传参的
 *          但如果匿名内部类创建的是类的子类对象,这时"()"是用来传参的,是给父类的构造器传参的
 *
 * @since 16:06
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        new IA() {
            @Override
            public void test() {
                System.out.println("我是接口IA的实现类对象!");
            }
        }.test();

        new Student(18) {
            public void method() {
                System.out.println(age);
            }
        }.method();

        System.out.println(new Student(28) {
            int age;
        }.age);

        Student s = new Student(38) {
            int age;
        };
        System.out.println(s.age);
    }
}

class Student {
    int age;

    public Student(int age) {
        this.age = age;
    }
}

interface IA {
    void test();
}